namespace :fluidos do
  desc "Lê as actions de todos os controllers e coloca os não existentes tabela de direitos do bd."
  task :importar_direitos => :environment do
    require 'pp'
    #ENUMERA OS CONTROLLERS
    controllers = []
    glob = RAILS_ROOT + '/app/controllers/*_controller.rb'
    Dir.glob(glob).each do |f|
      file = File.basename(f).gsub( /^(.+)_controller.rb/, '\1')
      controllers << file
    end
    #LE O PRINCIPAL
    caminho = RAILS_ROOT + "/app/controllers/application.rb"
    puts 'lendo ' << caminho
    load caminho

    #LE AS ACTIONS
    ar = []
    existentes = []
    count_importados = 0
    controllers.each do |controller_name|
       caminho = controller_name<<'_controller' 
       puts '::::::::::::::::::::::::LENDO ' << caminho
       require caminho
       puts('RECUPERANDO ACTIONS....')
       controller_name.camelize.constantize.action_methods.each do |method|
	 puts controller_name + '::' + method
	 begin
	   direito = Direito.find_by_controller_and_action(controller_name,method)
	   puts('.')
	   existentes << direito.id
	 rescue RecordNotFound
	   Direito.create({
	     :action=>method,
	     :controller=>controller_name
	   })
	   puts('. . . . . . . . . . . . . . . . . .i m p o r t a d o')
	   count_importados +=1
	 end # if/else
       end # actions.each...
    end # controllers.each...
    
    ### Removendo do banco direitos relativos a ações que não mais existem no banco. 

    direitos = Direito.find_by_sql('SELECT * FROM direito WHERE direito.id NOT IN('<<existentes.join(',')<<')')
    count_removidos = 0
    direitos.each do |d|
      count_removidos +=1
      d.destroy
    end

    puts('-----------------------------------------------------RESULTADOS')
    puts('importados:' << count_importados.to_s)
    puts('existentes:' << existentes.size.to_s)
    puts('removidos:' << count_removidos.to_s)
  end
end